package www.nomina.model.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import www.nomina.controller.beans.puestoBean;

public class puestoDao extends nominaDao {

	/**
	 * @author Men's
	 * @category Modulo Puesto Metodo para el Alta del Puesto
	 * @param Bean Precargado con los datos del usuario
	 * @return ningun valor
	 * @since 27 de enero del 2014*/	
	
	
	public ArrayList<puestoBean> getCatalgo() throws Exception{
		System.out.println("(PuestoDAO.getCatalgo)...............execute");
		StringBuilder query= new StringBuilder();
		ArrayList<puestoBean>result= new ArrayList<puestoBean>();
		try {
			query
				.append("select id_puesto, puesto, descripcion FROM Puesto");
				
			System.out.println("(PuestoDAO.getCatalgo):------->"+query.toString());
			conn=this.getConnectionMYSQL();
			ps=conn.prepareStatement(query.toString());
			rs=ps.executeQuery();
			puestoBean vo;
			
				while(rs.next()){
					
					   	vo= new puestoBean();
					
					vo.setId_puesto(rs.getInt("id_puesto"));
					vo.setPuesto(rs.getString("puesto"));
					vo.setDescripcion(rs.getString("descripcion"));			
					result.add(vo);
				}
			
			
		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		}catch (Exception error) {
			throw new Exception(error.getMessage());
		}
		
		return result;
	}
	
	
	
	public puestoBean getPuestoId(int id) throws Exception{
		System.out.println("(PuestoDAO.getUsuario)...............execute");
		
		StringBuilder query= new StringBuilder();
		puestoBean puesto= new puestoBean();
		try {
			query
				.append("select ")
				.append("* ")
				.append("from ")
				.append("Puesto ")
				.append("Where ")
				.append("id_puesto='")
				.append(id)
				.append("'");
	
			System.out.println("(PuestoDAO.getUsuario):------->"+query.toString());
			conn=this.getConnectionMYSQL();
			ps=conn.prepareStatement(query.toString());
			rs=ps.executeQuery();
			
			if(rs.next()){
				puesto.setId_puesto(rs.getInt("id_puesto"));
				puesto.setPuesto(rs.getString("puesto"));
				puesto.setDescripcion(rs.getString("descripcion"));
				
								
				
				System.out.println("Puesto encontrado");
			}else{
				throw new Exception("Error Puesto no existe.");
			}
			
			
		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		}catch (Exception error) {
			throw new Exception(error.getMessage());
			
		}
		return puesto;
	}
	
	
	public void insertPuesto(puestoBean registro) throws Exception {
		StringBuilder query = new StringBuilder();
		try {
			query.append("INSERT INTO puesto ")
					.append("( id_usuario, puesto, descripcion) ")
					.append("values (")
					.append(registro.getId_usuario())
					.append(",'")
					.append(registro.getPuesto())
					.append("','")
					.append(registro.getDescripcion())
					.append("');");
					
			System.out.println("Imprimiendo"+query);
			conn = this.getConnectionMYSQL();
			st = conn.createStatement();
			st.executeUpdate(query.toString());

		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(st);
			close(conn);
		}
	}
	/**
	 * @author Men's
	 * @category Modulo Puesto Metodo para la validacion del nombre del puesto y evitar duplicacion
	 * @param Bean Precargado con los datos del usuario
	 * @return true or false si existe el nombre de usuario
	 * @since 27 de enero del 2014*/
	public boolean validarDepartamento(puestoBean registro) throws Exception {
		StringBuilder query = new StringBuilder();
		boolean resp = false;

		try {
			query.append("select puesto from Puesto Where puesto='")
					.append(registro.getPuesto()).append("'");

			conn = this.getConnectionMYSQL();
			ps = conn.prepareStatement(query.toString());
			rs = ps.executeQuery();

			if (rs.next()) {
				resp = true;
			} else {
				resp = false;
			}

		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(conn);
			close(ps);
			close(rs);
		}
		return resp;
	}
	/**
	 * @author Men's
	 * @category Modulo Puesto Metodo para actualizar los puestos
	 * @param Bean precargado con los datos actualizados del usuario
	 * @return ningun valor
	 * @since 27 de enero del 2014*/
	public void updatePuesto(puestoBean registro) throws Exception {
		try {
			StringBuilder query = new StringBuilder();
			conn = this.getConnectionMYSQL();

			query.append("UPDATE Puesto SET ")
				.append("puesto=''")
				.append(registro.getPuesto())
				.append("','")
				.append("descripcion=''")
				.append(registro.getDescripcion())
				.append("','")
				.append(");");
			
			st = conn.createStatement();
			st.executeUpdate(query.toString());
			System.out.println("dao.puesto.updatepuesto.Ejecutado-> "+ query.toString());
			System.out.println("dao.puesto.updatepuesto--> actualizado");

		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(conn);
			close(st);
		}	
	}
	/**
	 * @author Men's
	 * @category Modulo Puesto Metodo para acambiar de estatus los puestos 
	 * @param Bean precargado con los datos actualizados del usuario
	 * @return ningun valor
	 * @since 27 de enero del 2014*/
	
		public void deletePuesto(puestoBean registro) throws Exception {
			try {
				StringBuilder query = new StringBuilder();
				conn = this.getConnectionMYSQL();

				query.append("DELETE puesto FROM Puesto ")
					 .append(");");
				
				st = conn.createStatement();
				st.executeUpdate(query.toString());
				System.out.println("dao.puesto.deletepuesto.Ejecutado-> "+ query.toString());
				System.out.println("dao.puesto.deletepuesto--> actualizado");

			} catch (SQLException error) {
				throw new Exception(error.getMessage());
			} catch (Exception error) {
				throw new Exception(error.getMessage());
			} finally {
				close(conn);
				close(st);
			}
	}
	
}